Išsamus „Visual Viewport API“ vadovas, skirtas prieigai prie maketo peržiūros srities informacijos ir jos naudojimui, siekiant kurti adaptyvų dizainą ir pagerinti vartotojo patirtį įvairiuose įrenginiuose.
Visual Viewport API paslapčių atskleidimas: maketo peržiūros srities (Layout Viewport) informacijos tyrinėjimas
Visual Viewport API yra galingas įrankis žiniatinklio kūrėjams, siekiantiems sukurti išties adaptyvias ir pritaikomas interneto patirtis. Jis leidžia programiškai pasiekti ir valdyti vizualiąją peržiūros sritį – tinklalapio dalį, kuri šiuo metu matoma vartotojui. Nors pati vizualioji peržiūros sritis yra tiesiogiai matoma sritis, API taip pat teikia esminę informaciją apie maketo peržiūros sritį (layout viewport), kuri atspindi visą tinklalapį, įskaitant sritis, kurios šiuo metu yra už ekrano ribų. Maketo peržiūros srities supratimas yra būtinas daugeliui pažangių žiniatinklio kūrimo metodų, ypač dirbant su mobiliaisiais įrenginiais ir skirtingais ekrano dydžiais.
Kas yra maketo peržiūros sritis (Layout Viewport)?
Maketo peržiūros sritis, koncepciniu požiūriu, yra visa drobė, kurioje atvaizduojamas jūsų tinklalapis. Ji paprastai yra didesnė nei vizualioji peržiūros sritis, ypač mobiliuosiuose įrenginiuose. Naršyklė naudoja maketo peržiūros sritį, kad nustatytų pradinį puslapio dydį ir mastelį. Įsivaizduokite ją kaip pagrindinio dokumento dydį prieš pritaikant bet kokį mastelio keitimą ar slinkimą. Kita vertus, vizualioji peržiūros sritis yra langas, per kurį vartotojas žiūri į maketo peržiūros sritį.
Ryšį tarp vizualiosios ir maketo peržiūros sričių apibrėžia peržiūros srities meta žyma jūsų HTML. Be tinkamai sukonfigūruotos peržiūros srities meta žymos, mobiliosios naršyklės gali atvaizduoti jūsų svetainę taip, lyg ji būtų skirta daug mažesniam ekranui, verčiant vartotoją priartinti vaizdą, kad galėtų perskaityti turinį. Tai lemia prastą vartotojo patirtį.
Pavyzdžiui, įsivaizduokite svetainę, sukurtą su 980 pikselių pločio maketo peržiūros sritimi. Mobiliame įrenginyje, kurio fizinis ekrano plotis yra 375 pikseliai, naršyklė iš pradžių gali atvaizduoti puslapį taip, lyg jis būtų peržiūrimas 980 pikselių pločio ekrane. Vartotojui tuomet reikėtų priartinti vaizdą, kad aiškiai matytų turinį. Naudodami Visual Viewport API, galite gauti abiejų peržiūros sričių dydį ir poziciją, leisdami dinamiškai koreguoti savo maketą ir stilių, kad optimizuotumėte jį pagal vartotojo įrenginį.
Prieiga prie maketo peržiūros srities informacijos naudojant Visual Viewport API
Visual Viewport API suteikia keletą savybių, kurios leidžia gauti informaciją apie maketo peržiūros sritį. Šios savybės yra prieinamos per window.visualViewport objektą (prieš naudodami, įsitikinkite, kad naršyklė jį palaiko):
offsetLeft: Atstumas (CSS pikseliais) nuo maketo peržiūros srities kairiojo krašto iki vizualiosios peržiūros srities kairiojo krašto.offsetTop: Atstumas (CSS pikseliais) nuo maketo peržiūros srities viršutinio krašto iki vizualiosios peržiūros srities viršutinio krašto.pageLeft: Vizualiosios peržiūros srities kairiojo krašto x koordinatė (CSS pikseliais) puslapio pradžios atžvilgiu. Pastaba: ši reikšmė gali apimti slinkimą.pageTop: Vizualiosios peržiūros srities viršutinio krašto y koordinatė (CSS pikseliais) puslapio pradžios atžvilgiu. Pastaba: ši reikšmė gali apimti slinkimą.width: Vizualiosios peržiūros srities plotis (CSS pikseliais).height: Vizualiosios peržiūros srities aukštis (CSS pikseliais).scale: Dabartinis mastelio keitimo faktorius. Reikšmė 1 reiškia, kad mastelis nekeičiamas. Didesnės nei 1 reikšmės reiškia priartinimą, o mažesnės nei 1 – atitolinimą.
Nors šios savybės tiesiogiai susijusios su *vizualiąja* peržiūros sritimi, jos yra labai svarbios norint suprasti ryšį tarp vizualiosios ir maketo peržiūros sričių. Žinodami scale, offsetLeft ir offsetTop galite daryti išvadas apie bendrą maketo peržiūros srities dydį ir padėtį vizualiosios peržiūros srities atžvilgiu. Pavyzdžiui, galite apskaičiuoti maketo peržiūros srities matmenis naudodami šią formulę (nors atminkite, kad tai yra *apytikslis* skaičiavimas):
layoutViewportWidth = visualViewport.width / visualViewport.scale;
layoutViewportHeight = visualViewport.height / visualViewport.scale;
Atminkite, kad šie skaičiavimai yra apytiksliai ir gali būti ne visai tikslūs dėl naršyklių įgyvendinimo ir kitų veiksnių. Tiksliam maketo peržiūros srities dydžiui nustatyti naudokite `document.documentElement.clientWidth` ir `document.documentElement.clientHeight`.
Praktiniai pavyzdžiai ir naudojimo atvejai
Panagrinėkime keletą praktinių scenarijų, kuriuose maketo peržiūros srities informacijos supratimas yra neįkainojamas:
1. Dinaminis turinio mastelio keitimas ir pritaikymas
Įsivaizduokite, kad kuriate žiniatinklio programą, kurioje reikia rodyti didelius vaizdus ar interaktyvius žemėlapius. Norite užtikrinti, kad turinys visada tilptų matomame ekrano plote, nepriklausomai nuo įrenginio ar mastelio lygio. Naudodami vizualiosios peržiūros srities width, height ir scale savybes, galite dinamiškai koreguoti turinio dydį ir padėtį, kad išvengtumėte išlipimo iš rėmų ar apkirpimo. Tai ypač svarbu vieno puslapio programoms (SPA), kurios labai priklauso nuo JavaScript atvaizdavimo.
Pavyzdys:
function adjustContent() {
if (!window.visualViewport) return;
const visualViewportWidth = window.visualViewport.width;
const visualViewportHeight = window.visualViewport.height;
const visualViewportScale = window.visualViewport.scale;
const contentElement = document.getElementById('myContent');
// Apskaičiuokite norimą plotį ir aukštį pagal vizualiąją peržiūros sritį
const desiredWidth = visualViewportWidth / visualViewportScale;
const desiredHeight = visualViewportHeight / visualViewportScale;
// Pritaikykite stilius
contentElement.style.width = desiredWidth + 'px';
contentElement.style.height = desiredHeight + 'px';
}
// Iškvieskite adjustContent pradinio įkėlimo metu ir kai pasikeičia vizualioji peržiūros sritis
adjustContent();
window.visualViewport.addEventListener('resize', adjustContent);
Šis kodo fragmentas gauna vizualiosios peržiūros srities matmenis ir mastelį ir naudoja juos norimam turinio elemento pločiui ir aukščiui apskaičiuoti. Tada jis pritaiko šiuos stilius elementui, užtikrindamas, kad jis visada tilptų matomame ekrano plote. resize įvykio klausytojas užtikrina, kad turinys būtų pakoreguotas, kai tik pasikeičia vizualioji peržiūros sritis (pvz., dėl mastelio keitimo ar orientacijos pasikeitimo).
2. Individualios mastelio keitimo funkcijos įgyvendinimas
Nors naršyklės suteikia integruotą mastelio keitimo funkciją, galbūt norėsite įdiegti individualius mastelio keitimo valdiklius, kad sukurtumėte labiau pritaikytą vartotojo patirtį. Pavyzdžiui, galite sukurti mastelio keitimo mygtukus, kurie priartina vaizdą tam tikrais žingsniais, arba įdiegti mastelio keitimo slankiklį. Visual Viewport API leidžia programiškai pasiekti ir valdyti mastelio lygį (scale).
Pavyzdys:
function zoomIn() {
if (!window.visualViewport) return;
const currentScale = window.visualViewport.scale;
const newScale = currentScale + 0.2; // Padidinkite mastelį 20%
// Apribokite maksimalų mastelio lygį
if (newScale <= 5) {
window.visualViewport.scale = newScale;
}
}
function zoomOut() {
if (!window.visualViewport) return;
const currentScale = window.visualViewport.scale;
const newScale = currentScale - 0.2; // Sumažinkite mastelį 20%
// Apribokite minimalų mastelio lygį
if (newScale >= 0.2) {
window.visualViewport.scale = newScale;
}
}
// Priskirkite šias funkcijas mastelio keitimo mygtukams
document.getElementById('zoomInButton').addEventListener('click', zoomIn);
document.getElementById('zoomOutButton').addEventListener('click', zoomOut);
Šis kodo fragmentas apibrėžia dvi funkcijas, zoomIn ir zoomOut, kurios padidina arba sumažina mastelio lygį fiksuotu dydžiu. Jame taip pat yra apribojimų, neleidžiančių vartotojui per daug priartinti ar atitolinti vaizdo. Šios funkcijos tada priskiriamos mygtukams, leidžiant vartotojui valdyti mastelio lygį per individualius valdiklius.
3. Įtraukiančių patirčių kūrimas žemėlapiams ir žaidimams
Žiniatinklio žemėlapiams ir žaidimams dažnai reikia tikslios peržiūros srities ir mastelio kontrolės. Visual Viewport API suteikia reikiamus įrankius įtraukiančioms patirtims kurti, leisdama dinamiškai koreguoti peržiūros sritį pagal vartotojo veiksmus. Pavyzdžiui, žemėlapių programoje galite naudoti API sklandžiam žemėlapio priartinimui ir atitolinimui, kai vartotojas slenka arba suima ekraną.
4. Fiksuotos pozicijos elementų valdymas
Elementai su position: fixed yra pozicionuojami peržiūros srities atžvilgiu. Kai vartotojas priartina vaizdą, vizualioji peržiūros sritis sumažėja, tačiau fiksuotas elementas gali neprisitaikyti teisingai, jei naudojate tik CSS. Visual Viewport API gali padėti koreguoti fiksuotų elementų padėtį ir dydį, kad jie atitiktų vizualiąją peržiūros sritį.
5. Klaviatūros problemų sprendimas mobiliuosiuose įrenginiuose
Mobiliuosiuose įrenginiuose klaviatūros iškvietimas dažnai keičia vizualiosios peržiūros srities dydį, kartais uždengdamas įvesties laukus ar kitus svarbius vartotojo sąsajos elementus. Klausydamiesi vizualiosios peržiūros srities resize įvykio, galite nustatyti, kada klaviatūra rodoma, ir atitinkamai pakoreguoti maketą, kad įvesties laukai liktų matomi. Tai labai svarbu norint užtikrinti sklandžią ir patogią vartotojo patirtį mobiliuosiuose įrenginiuose. Tai taip pat gyvybiškai svarbu norint laikytis WCAG gairių.
Pavyzdys:
window.visualViewport.addEventListener('resize', () => {
const keyboardVisible = window.visualViewport.height < window.innerHeight;
if (keyboardVisible) {
// Koreguokite maketą, kad įvesties laukas būtų matomas
document.getElementById('myInputField').scrollIntoView();
} else {
// Atšaukite maketo korekcijas
}
});
Šis pavyzdys patikrina, ar vizualiosios peržiūros srities aukštis yra mažesnis už lango aukštį, o tai rodo, kad klaviatūra greičiausiai yra matoma. Tada jis naudoja scrollIntoView() metodą, kad nuslinktų įvesties lauką į matomą sritį, užtikrindamas, kad jo neuždengtų klaviatūra. Kai klaviatūra paslepiama, maketo korekcijos gali būti atšauktos.
Naršyklių palaikymas ir aspektai
Visual Viewport API yra gerai palaikomas šiuolaikinėse naršyklėse. Tačiau prieš naudojant jį savo kode, labai svarbu patikrinti naršyklės palaikymą. Tai galite padaryti patikrinę, ar egzistuoja window.visualViewport objektas. Jei API nepalaikomas, galite naudoti alternatyvius metodus, tokius kaip medijos užklausos arba window.innerWidth ir window.innerHeight, kad pasiektumėte panašių rezultatų, nors šie metodai gali būti ne tokie tikslūs.
Pavyzdys:
if (window.visualViewport) {
// Naudokite Visual Viewport API
} else {
// Naudokite alternatyvius metodus
}
Taip pat svarbu žinoti apie galimas našumo pasekmes naudojant Visual Viewport API. Prieiga prie peržiūros srities savybių ir reagavimas į peržiūros srities pakeitimus gali sukelti maketo perskaičiavimus (reflows), o tai gali paveikti našumą, ypač mobiliuosiuose įrenginiuose. Optimizuokite savo kodą, kad sumažintumėte nereikalingus perskaičiavimus ir užtikrintumėte sklandžią vartotojo patirtį. Apsvarstykite galimybę naudoti tokius metodus kaip „debouncing“ ar „throttling“, kad apribotumėte atnaujinimų dažnumą.
Prieinamumo aspektai
Naudojant Visual Viewport API, būtina atsižvelgti į prieinamumą. Užtikrinkite, kad jūsų svetainė išliktų naudojama ir prieinama vartotojams su negalia, nepriklausomai nuo jų įrenginio ar mastelio lygio. Venkite pasikliauti vien vizualiniais ženklais ir suteikite alternatyvių būdų vartotojams sąveikauti su jūsų turiniu. Pavyzdžiui, jei naudojate individualius mastelio keitimo valdiklius, pateikite sparčiuosius klavišus arba ARIA atributus, kad jie būtų prieinami vartotojams, negalintiems naudotis pele. Teisingas peržiūros srities meta žymų ir Visual Viewport API naudojimas gali pagerinti skaitomumą vartotojams su silpnu regėjimu, leisdamas jiems priartinti vaizdą nesugadinant maketo.
Internacionalizacija ir lokalizacija
Apsvarstykite skirtingų kalbų ir lokalizacijų poveikį jūsų svetainės maketui ir adaptyvumui. Teksto ilgis gali labai skirtis tarp kalbų, o tai gali paveikti elementų dydį ir padėtį puslapyje. Naudokite lanksčius maketus ir adaptyvaus dizaino metodus, kad užtikrintumėte, jog jūsų svetainė sklandžiai prisitaikytų prie skirtingų kalbų. Visual Viewport API gali būti naudojamas aptikti peržiūros srities dydžio pokyčius dėl konkrečiai kalbai būdingo teksto atvaizdavimo ir atitinkamai pakoreguoti maketą.
Pavyzdžiui, tokiose kalbose kaip vokiečių, žodžiai paprastai yra ilgesni, o tai gali sukelti maketo problemų, jei nėra tinkamai apdorojama. Kalbose, rašomose iš dešinės į kairę (RTL), tokiose kaip arabų ar hebrajų, visas maketas turi būti atspindėtas. Užtikrinkite, kad jūsų kodas būtų tinkamai internacionalizuotas ir lokalizuotas, kad palaikytų pasaulinę auditoriją.
Geriausios praktikos ir patarimai
- Tikrinkite naršyklės palaikymą: Visada patikrinkite, ar Visual Viewport API yra palaikomas, prieš jį naudodami.
- Optimizuokite našumą: Sumažinkite nereikalingus maketo perskaičiavimus, kad išvengtumėte našumo problemų.
- Atsižvelkite į prieinamumą: Užtikrinkite, kad jūsų svetainė išliktų prieinama vartotojams su negalia.
- Testuokite skirtinguose įrenginiuose: Išbandykite savo svetainę įvairiuose įrenginiuose ir ekrano dydžiuose, kad įsitikintumėte, jog ji yra tikrai adaptyvi.
- Naudokite „debouncing“ ir „throttling“: Apribokite atnaujinimų dažnumą, kad pagerintumėte našumą.
- Teikite pirmenybę vartotojo patirčiai: Visada atsižvelkite į vartotojo patirtį naudodami Visual Viewport API.
Išvada
Visual Viewport API suteikia galingą įrankių rinkinį, skirtą kurti adaptyvias ir pritaikomas interneto patirtis. Suprasdami maketo peržiūros sritį ir naudodami API savybes, galite kurti svetaines, kurios puikiai atrodo ir nepriekaištingai veikia bet kokiame įrenginyje. Naudodami API, nepamirškite atsižvelgti į naršyklės palaikymą, našumą, prieinamumą ir internacionalizaciją, kad užtikrintumėte, jog jūsų svetainė teiktų teigiamą patirtį visiems vartotojams visame pasaulyje. Eksperimentuokite su API, tyrinėkite jo galimybes ir atraskite naujas galimybes kurti įtraukiančias ir įspūdingas žiniatinklio programas.
Tolesni tyrimai: Ištirkite kitas Viewport API funkcijas, tokias kaip slinkimo įvykiai, lietimo įvykiai ir integracija su kitomis žiniatinklio API.